<?php


class Vista {
	private $registro;
	private $smarty;
	
	/**
	 * @constructor
	 * @classDescription Classe Vista que recebe um Registro como parametro. 
	 * @param Registro $registro
	 */
	public function Vista($registro, $smarty){
		$this->setRegistro($registro);
		$this->setSmarty($smarty);
	}
	
	/**
	 * Exibe o cabecalho, a pagina $pagina e o rodape. 
	 * @param string $pagina
	 */
	public function exibir($pagina){
		if (defined('PARAMETRO_0') && constant('PARAMETRO_0') == 'curso') {
			$caminhoPagina	=	constant('CAMINHO_SITE') . 'vista/curso/'. $pagina . '.tpl';
		}
		else {
			$caminhoPagina	=	constant('CAMINHO_SITE') . 'vista/externo/'. $pagina . '.tpl';
		}
		if ($pagina == 'principal') {
			$this->getSmarty()->display('./externo/principal.tpl');
		}
		else {
			echo "<!--PAGINA: $caminhoPagina-->\n";
			if (file_exists($caminhoPagina)){
				if (defined('PARAMETRO_0') && constant('PARAMETRO_0') == "curso") {
					//TODO Este e o melhor lugar para instanciar o curso? So precisa dele para o Layout, mas precisa dele instanciado.
					$urlCurso			=	constant('PARAMETRO_1');
					$cursoVisualizado	=	new Curso(null, $urlCurso);
					$this->getSmarty()->assign_by_ref('cursoVisualizado', $cursoVisualizado);
					
					$this->getSmarty()->display('./curso/cabecalho.tpl');
					$this->getSmarty()->display('./curso/menu.tpl');
					$this->getSmarty()->display($caminhoPagina);
					$this->getSmarty()->display('./curso/rodape.tpl');
				}
				else {
					$this->getSmarty()->display('./externo/cabecalho.tpl');
					$this->getSmarty()->display('./externo/menu.tpl');
					$this->getSmarty()->display($caminhoPagina);
					$this->getSmarty()->display('./externo/rodape.tpl');
				}
			}
			else{
				header('Status: 404 Not Found');
				redireciona(array('404'));
			}
		}
	}
	
	/**
	 * Retorna o Registro $registro da Vista.
	 * @return Registro
     * @see Vista::$registro
     */
    private function getRegistro()
    {
        return $this->registro;
    }
   
    /**private $registro;
     * Seta o registro da Vista com $registro.
     * @param Registro $registro
     * @see Vista::$registro
     */
    private function setRegistro($registro)
    {
        $this->registro = $registro;
    }

    
    /**
     * Retorna o $smarty da Vista.
     *
     * @see Vista::$smarty
     */
    public function getSmarty() {
        return $this->smarty;
    }
    
    /**
     * Seta o $smarty da Vista.
     *
     * @param object $smarty
     * @see Vista::$smarty
     */
    public function setSmarty($smarty) {
        $this->smarty = $smarty;
    }
    }
?>